package cc.jq1024.annotations;

import java.lang.annotation.*;
import java.util.concurrent.TimeUnit;

@Target({ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface RateLimiterAccessInterceptor {

    // 基于某个字段进行限流(可以从入参取到)？ or 其他，all就是不拦截
    String key() default "all";

    // 限制频次(20次/分？)
    double permitsPerSecond() default 20.0;
    // 限制时间
    long permitsExp() default 1;
    // 限制时间单位
    TimeUnit permitsUnit() default TimeUnit.MINUTES;

    // 指定时间内（默认24h）被限流几次之后进行黑名单处理
    double blacklistCount() default 1.0;
    // 黑名单过期时间
    long blacklistExp() default 24;
    // 时间单位
    TimeUnit timeUnit() default TimeUnit.HOURS;

    // 拦截后的方法 -》 给用户展示什么页面等
    String fallbackMethod();

}